package com.huanf.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huanf.domain.User;
import com.huanf.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author: 35238
 * 功能: 除了BaseMapper接口提供的分页功能，我们还可以自定义分页功能
 * 时间: 2024-01-01 18:25
 */
@RestController
public class MyPageController {

    //自定义分页功能: 如果在开发中，查询语句是我们自定义的，此时要通过分页插件实现分页功能，这个时候就需要自定义分页功能

    //1. 首先要模拟一下自定义查询语句，去UserMapper接口添加如下:

    /*//自定义查询方法。注意方法如果是为了实现自定义分页功能的话，那么返回值必须是Page<>，对应的泛型就写实体类。且第一个参数必须是Page<>，对应的泛型就写实体类
    Page<User> selectPageVo(@Param("page_mm") Page<User> page, Integer age);//根据年龄查询用户信息并进行分页查询
    //因为上面那行有两个参数，所以我们可以通过@Param注解来设置命名参数来规定当前参数的访问规则
    //然后去UserMapper.xml写对应的SQL语句*/

    //2. 然后去UserMapper.xml写对应的SQL语句，如下

    /*<!--自定义查询语句，用于分页查询: Page<User> selectPageVo(@Param("page_mm") Page<User> page, Integer age);//根据年龄查询用户信息并进行分页查询-->
    <select id="selectPageVo" resultType="User">
    <!--注意上一行的resultType属性写的是实体类(例如User类)的路径，或者别名，如果是别名的话，需要额外去application.yml文件里面添加一点点配置代码-->
    select uid,user_name,age,email from t_user where age > #{age}
    </select>*/

    //3. 最后就可以使用了，在下面写入如下演示接口

    @Autowired
    private UserMapper userMapper;

    //----------------------------------自定义分页功能------------------------------------

    @GetMapping("/myPage1") //浏览器访问 http://localhost:8050/myPage1
    public String myPage1() {
        //每页显示3条数据，我们访问第2页，也就是控制台会输出第2页的3条数据。注意索引写0或者1，都表示第1页，写2就表示第2页
        Page<User> user = new Page<>(2,3);
        //年龄传了5，也就是对应我们在UserMapper.xml写的SQL语句，表示先把大于5岁的用户查询出来，然后对查询结果进行分页展示
        userMapper.selectPageVo(user, 5);
        //由于我们在yml配置了日志，所以控制台会打印出你分页后的数据
        return "请回idea控制台查看";
    }

    //-------------------------------当然也是可以获取到分页参数------------------------------

    @GetMapping("/myPage2") //浏览器访问 http://localhost:8050/myPage2
    public String myPage2() {
        //每页显示4条数据，我们访问第2页，也就是控制台会输出第2页的4条数据。注意索引写0或者1，都表示第1页，写2就表示第2页
        Page<User> user = new Page<>(2,4);
        userMapper.selectPageVo(user, 5);//这行要写，不然下面的几个参数是获取不到的
        System.out.println("当前页码是: "+user.getCurrent());
        System.out.println("每页输出的条数是: "+user.getSize());
        System.out.println("总页数是: "+user.getPages());
        System.out.println("总记录数是: "+user.getTotal());
        System.out.println("是否有下一页: "+user.hasNext());
        System.out.println("是否有上一页: "+user.hasPrevious());
        return "请回idea控制台查看";
    }

    //注意逻辑字段不管删没删，都会被查询到
}
